MVVM (Model-View-ViewModel) প্যাটার্নে Navigation এবং Data Passing দুটি গুরুত্বপূর্ণ বিষয়, বিশেষত যখন একাধিক পেজ বা ভিউ এর মধ্যে ডেটা শেয়ার করা এবং এক ভিউ থেকে অন্য ভিউতে নেভিগেট করা প্রয়োজন। MVVM অ্যাপ্লিকেশনে সাধারণত ডেটা বাইন্ডিং এবং কমান্ড প্যাটার্ন ব্যবহার করা হয় নেভিগেশন এবং ডেটা পাসিং এর জন্য, যাতে ViewModel এবং View এর মধ্যে স্পষ্ট বিভাজন থাকে।
এখানে Navigation Parameter এবং Data Passing Techniques সম্পর্কে বিস্তারিত আলোচনা করা হয়েছে।
Navigation এর মাধ্যমে আপনি এক ভিউ থেকে অন্য ভিউতে যেতে পারেন এবং মাঝে মাঝে আপনাকে কিছু ডেটা পাস করতে হতে পারে। এই ডেটা পাসিংয়ের মাধ্যমে পরবর্তী ভিউটি বা পেজটি প্রাসঙ্গিক ডেটার সাথে লোড হতে পারে।
Navigation Parameter হল সেই প্যারামিটার, যা একটি ভিউ থেকে অন্য ভিউতে পাস করা হয়। সাধারণত, এটি ViewModel এর মাধ্যমে সম্পন্ন করা হয়, এবং এই প্যারামিটারটি নেভিগেশনের সাথে সম্পর্কিত ডেটা বা ইউজারের ইন্টারঅ্যাকশন অনুযায়ী পরিবর্তিত হতে পারে।
ধরা যাক, আপনি একটি ProductDetailPage পেজে নেভিগেট করতে চান এবং সেখানে একটি পণ্য সম্পর্কিত বিস্তারিত তথ্য পাস করতে চান। এই পণ্যটির আইডি বা নাম আপনি পাস করতে পারবেন।
public class ProductListViewModel
{
private readonly INavigationService _navigationService;
public ICommand ViewProductDetailsCommand { get; private set; }
public ProductListViewModel(INavigationService navigationService)
{
_navigationService = navigationService;
ViewProductDetailsCommand = new RelayCommand<int>(ViewProductDetails);
}
private void ViewProductDetails(int productId)
{
_navigationService.NavigateTo("ProductDetailPage", new NavigationParameters { { "ProductId", productId } });
}
}
এখানে, ProductListViewModel এর ViewProductDetailsCommand কমান্ডের মাধ্যমে ProductDetailPage এ একটি productId প্যারামিটার পাঠানো হচ্ছে।
ProductDetailPage পেজে, প্যারামিটার গ্রহণ করতে হবে এবং সেই অনুযায়ী ViewModel-এ প্রাসঙ্গিক ডেটা লোড করতে হবে।
public class ProductDetailViewModel
{
private readonly IProductService _productService;
private int _productId;
public string ProductName { get; set; }
public decimal ProductPrice { get; set; }
public ProductDetailViewModel(INavigationService navigationService, IProductService productService)
{
_productService = productService;
// Navigating and receiving the parameter
navigationService.Navigated += (sender, args) =>
{
if (args.NavigationContext.Parameters.ContainsKey("ProductId"))
{
_productId = (int)args.NavigationContext.Parameters["ProductId"];
LoadProductDetails();
}
};
}
private void LoadProductDetails()
{
var product = _productService.GetProductById(_productId);
ProductName = product.Name;
ProductPrice = product.Price;
}
}
এখানে, ProductDetailViewModel পেজের নেভিগেশন থেকে productId প্যারামিটার গ্রহণ করছে এবং সেই অনুযায়ী প্রোডাক্টের বিস্তারিত তথ্য লোড করছে।
MVVM অ্যাপ্লিকেশনে এক ভিউ থেকে অন্য ভিউতে ডেটা পাস করার বেশ কয়েকটি জনপ্রিয় পদ্ধতি রয়েছে। এই পদ্ধতিগুলি ViewModel এর মাধ্যমে পরিচালিত হয় এবং View এবং ViewModel এর মধ্যে সঠিক বিভাজন বজায় রাখে।
Data Binding হল সবচেয়ে সাধারণ পদ্ধতি, যেখানে একটি ভিউ ViewModel এর প্রপার্টি সাথে বাইন্ড করা হয়। এই পদ্ধতিতে, যখন ViewModel এর প্রপার্টি পরিবর্তিত হয়, তখন তা স্বয়ংক্রিয়ভাবে View-এ প্রতিফলিত হয়। এই পদ্ধতিতে ডেটা পাস করার জন্য Command Parameter এবং ViewModel প্রপার্টি ব্যবহার করা যেতে পারে।
<!-- XAML File (View) -->
<Button Content="View Product Details" Command="{Binding ViewProductDetailsCommand}" CommandParameter="{Binding SelectedProductId}" />
এখানে, Button কমান্ডের মাধ্যমে SelectedProductId CommandParameter হিসাবে পাস করা হচ্ছে। এই প্যারামিটার ViewModel এর ViewProductDetailsCommand কমান্ডে পাস হবে।
একাধিক ভিউ বা পেজের মধ্যে ডেটা শেয়ার করার জন্য EventAggregator ব্যবহার করা যেতে পারে। এটি ViewModel-গুলোর মধ্যে ইভেন্ট কমিউনিকেশন করতে সাহায্য করে এবং ডেটা পাস করার একটি সুবিধাজনক পদ্ধতি সরবরাহ করে।
public class ProductSelectionEvent : PubSubEvent<int> { }
public class ProductListViewModel
{
private readonly IEventAggregator _eventAggregator;
public ProductListViewModel(IEventAggregator eventAggregator)
{
_eventAggregator = eventAggregator;
}
public ICommand SelectProductCommand { get; private set; }
private void SelectProduct(int productId)
{
_eventAggregator.GetEvent<ProductSelectionEvent>().Publish(productId);
}
}
এখানে, ProductListViewModel ইভেন্টটি পাবলিশ করছে যখন একটি প্রোডাক্ট নির্বাচন করা হয়। আর অন্য ViewModel বা ভিউ সেই ইভেন্টটি সাবস্ক্রাইব করে ডেটা গ্রহণ করতে পারে।
Service-based communication হল যেখানে একটি শেয়ার করা Service ক্লাসের মাধ্যমে ডেটা পাস করা হয়। এখানে ডেটা সাধারণত ViewModel থেকে Service-এ পাস করা হয় এবং তারপর সেখান থেকে অন্য ViewModel এ প্রেরণ করা হয়।
public class ProductService
{
private Product _selectedProduct;
public Product GetSelectedProduct()
{
return _selectedProduct;
}
public void SetSelectedProduct(Product product)
{
_selectedProduct = product;
}
}
public class ProductListViewModel
{
private readonly ProductService _productService;
public ProductListViewModel(ProductService productService)
{
_productService = productService;
}
public ICommand SelectProductCommand { get; private set; }
private void SelectProduct(Product product)
{
_productService.SetSelectedProduct(product);
}
}
এখানে, ProductService ক্লাসটি ViewModel গুলোর মধ্যে ডেটা শেয়ার করতে সাহায্য করছে।
Navigation Parameters এবং Data Passing Techniques MVVM প্যাটার্নে সঠিকভাবে নেভিগেশন এবং ডেটা আদান-প্রদান করতে অত্যন্ত গুরুত্বপূর্ণ। Navigation Parameters এর মাধ্যমে এক ভিউ থেকে অন্য ভিউতে ডেটা পাস করা সহজ হয় এবং Data Binding সহ অন্যান্য পদ্ধতিগুলির মাধ্যমে ডেটা শেয়ার করা হয় যা অ্যাপ্লিকেশনটির কার্যক্ষমতা এবং ব্যবহারকারীর অভিজ্ঞতা বৃদ্ধি করে।
common.read_more